﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace hse_2013_database
{
    public class Book
    {
        /// <summary>
        /// Название книги
        /// </summary>
        private string nazvanie;
        /// <summary>
        /// Название книги
        /// </summary>
        public string Nazvanie
        {
            get { return nazvanie; }
            set { nazvanie = value; }
        }
        /// <summary>
        /// Автор книги
        /// </summary>
        private string author;
        /// <summary>
        /// Автор книги
        /// </summary>
        public string Author
        {
            get { return author; }
            set { author = value; }
        }
        /// <summary>
        /// Количество страниц в книге
        /// </summary>
        private uint stranic;
        /// <summary>
        ///Количество страниц в книге
        /// </summary>
        public uint Stranic
        {
            get { return stranic; }
            set { stranic = value; }
        }
        
        /// <summary>
        /// Количество книг в наличии
        /// </summary>
        private uint kolvo;
        /// <summary>
        /// Количество книг в наличии
        /// </summary>
        public uint Kolvo
        {
            get { return kolvo; }
            set { kolvo = value; }
        }
        
        /// <summary>
        /// Издательство книги
        /// </summary>
        private string izdatelstvo;
        /// <summary>
        /// Издательство книги
        /// </summary>
        public string Izdatelstvo
        {
            get { return izdatelstvo; }
            set { izdatelstvo = value; }
        }
        /// <summary>
        /// Название корпуса
        /// </summary>
        private string place;
        /// <summary>
        /// Название корпуса
        /// </summary>
        public string Place
        {
            get { return place; }
            set { place = value; }
        }
        /// <summary>
        /// Инициализирует новый объект Book с указанным названием, автором, количеством страниц, количеством книг в магазине,
        /// количсеством книг на складе и издательством.
        /// </summary>
        /// <param name="n"></param>
        /// <param name="au"></param>
        /// <param name="st"></param>
        /// <param name="c"></param>
        /// <param name="kol"></param>
        /// <param name="nskl"></param>
        /// <param name="izd"></param>
        public Book(string n, string au, uint st, uint kol, string izd, string plc)
        {
            Nazvanie = n;
            Author = au;
            Stranic = st;
            Kolvo = kol;
            Izdatelstvo = izd;
            Place = plc;
        }
        /// <summary>
        /// Ищет вхождение строки s в строки с названием, автором или издательством данной книги
        /// в зависимости от параметра param, если оно присутствует возвращаем true
        /// </summary>
        /// <param name="s">Строка которую нужно найти</param>
        /// <param name="param">В зависимости от этого праметра выбирается критерий поиска</param>
        /// <returns></returns>
        public bool compare(string s, int param)
        {
            bool b = true;
            if (param == 0)//если ещем по названию
            {   //в случае нахождения возвращаем true
                if (doit(nazvanie.ToUpper(), s))
                    return true;
                else
                    return false;
            }
            else
                if (param == 1)//если ищем по автору
                {   //в случае нахождения возвращаем true
                    if (doit(author.ToUpper(), s))
                        return true;
                    else
                        return false;
                }
                else
                    if (param == 2)//если ищем по издательству
                    {   //в случае нахождения возвращаем true
                        if (doit(izdatelstvo.ToUpper(), s))
                            return true;
                        else
                            return false;
                    }
                    else
                        b = false;
            return b;
        }
        /// <summary>
        /// Метод ищущий вхождение строки s  в строку naz, если оно есть
        /// возвращаем true
        /// </summary>
        /// <param name="naz">Строка в которой идёт поиск вхождения</param>
        /// <param name="s">Строка вхождение которой ищем</param>
        /// <returns></returns>
        public bool doit(string naz, string s)
        {
            bool b = true;
            string s1 = s.ToUpper();//строка для сравнения
            int i, j;
            i = 0;
            while (i < naz.Length)
            {
                b = true;
                //если строка вхождение которой ищем больше возвращаем false
                if (i + s1.Length > naz.Length)
                {
                    b = false;
                    break;
                }
                j = 0;

                while (j < s1.Length)
                    if (naz[i + j] == s1[j])//ищём вхождение
                        j++;
                    else
                    {
                        b = false;
                        break;
                    }
                if (!b)//если вхождение не начинается с данной буквы переходим к следущей
                    i++;
                else
                    break;
            }

            return b;
        }
        /// <summary>
        /// Возвращение строки с информацией о книге
        /// </summary>
        /// <returns></returns>
        public string Info()
        {
            string str = Nazvanie + ";" + Author + ";" + Stranic.ToString() + ";" + Kolvo.ToString() + ";"  + Izdatelstvo + ";"+Place;
            return str;
        }
        
        
    }
}
